Roi Naveiro
2022-12-18
Las herramientas de modelización tienen cuatro objetivos fundamentales:
Explorar los datos: los modelos a veces revelan patrones que no son evidentes en las visualizaciónes (>3D)
Generalizar hallazgos de una muestra a la población (inferencia)
Determinar relaciones causa-efecto (inferencia causal)
Los patrones descubiertos por las herramientas de modelización pueden ser:
Además, estos patrones pueden:
La forma de recolectar los datos afecta al tipo de generalización de las conclusiones:
¿Muestrear datos al azar nos garantiza que los patrones detectados sean relaciones causa-efecto reales?
Se observó que las mujeres que desayunaban tenían un índice de masa corporal promedio más bajo, un indicador común de obesidad, que las que no desayunaban. El índice fue aún más bajo para las que desayunaban cereales, según los hallazgos del estudio realizado por el Instituto de Investigación Médica de Maryland con fondos de NIH y el fabricante de cereales General Mills.
[…]
Los resultados se obtuvieron de una encuesta de NIH de 2379 mujeres en California, Ohio y Maryland.
[…]
Como parte de la encuesta, se preguntaba a las niñas una vez al año qué habían comido durante los tres días anteriores…
Existen tres posibles explicaciones de este hallazgo:
Comer cereales es la causa de que las mujeres estén delgadas
Que las mujeres estén delgadas es la causa de que coman cerales
Existe una tercera variable que es causa de estas dos, variable de confusión
Una variable de confusión es una variable exógena que es causa tanto a la variable explicativa como a la de respuesta, y que hace que parezca que existe una relación entre ellas.
“Aquellos que desayunan regularmente tienen más probabilidades de tener un plan de alimentación estructurado a lo largo del día y, en consecuencia, es menos probable que coman entre comidas y consuman calorías vacías”.
¿Por qué se publica esto?
Según el proceso de recolección de los datos, distinguimos estudios:
Observacionales
Se recogen datos de forma que no se altera el proceso de generación de los mismos
Sirven para determinar asociación
Experimentales
Se asignan diferentes tratamientos a distintos individuos
Establecer relaciones causa-efecto
Las herramientas de modelización tienen cuatro objetivos fundamentales:
Explorar los datos: los modelos a veces revelan patrones que no son evidentes en las visualizaciónes (>3D)
Generalizar hallazgos de una muestra a la población (inferencia)
Determinar relaciones causa-efecto (inferencia causal)
En lo que resta de curso, introduciremos herramientas básicas de modelización, poniendo el foco en su uso como técnicas de exploración de datos.
No vamos a estudiar cómo usar estas herramientas para generalizar resultados a poblaciones, ni para determinar causalidad.
No hay nada malo con la exploración, pero nunca debes vender un análisis exploratorio como un análisis confirmatorio porque es engañoso.
Herramientas que nos permiten extraer patrones de los datos.
Patrones vs residuos
Estudiaremos modelos que relacionan un serie de variables (variables predictoras) coon una variable de interés (variable respuesta)
Representamos estas relaciones como funciones
Una función mapea unos inputs a un output
Esta función tiene input \(x\) y output \(y\) \[ y = 3x + 7 \]
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + theme_minimal() +
geom_smooth(method="lm", se=FALSE, color='red')Distinguimos elementos importantes
\[ y = \beta_0 + \beta_1 x \]
OJO: el mejor modelo de la familia no tiene por qué ser la realidad. Los modelos son simplificaciones de la realidad que nos sirven de algún propósito
Variable respuesta: Variable cuyo comportamiento o variación se está tratando de entender. También llamada variable dependiente. Eje y.
Variables explicativas: otras variables que desea utilizar para explicar la variación en la respuesta. También llamadas variables independientes, covariables, predictores o features. Eje x.
Valor predicho: output del modelo para cierto valor de las covariables.
Discute los elementos anteriores en este ejemplo.
ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + theme_minimal() +
geom_smooth(method="lm", se=FALSE, color='red')Los datos anteriores presentan un patrón claro
Usaremos un modelo para capturar ese patrón y hacerlo explícito
Un modelo lineal parece razonable \(y = \beta_0 + \beta_1 x\)
Existen infinitos modelos en esta familia
models <- tibble(
a1 = runif(250, -20, 40),
a2 = runif(250, -5, 5)
)
ggplot(mtcars, aes(wt, mpg)) +
geom_abline(aes(intercept = a1, slope = a2), data = models, alpha = 1/4) +
geom_point() + theme_minimal()La mayoría de estos modelos son malos, no capturan el patrón
Necesitamos determinar qué modelos son más cercanos a los datos
Una opción, usar el modelo que minimice suma de las distancias verticales de cada punto a la recta del modelo
Este modelo se conoce como regresión lineal. Para obtener el valor de los coeficientes usando R, hacemos
## (Intercept) wt
## 37.285126 -5.344472
El objeto mpg ~ wt es una fórmula. Equivale a $ = _0
+ _1 $
Intercept es la estimación del coeficiente \(\beta_0\) y el otro número es la estimación de \(\beta_1\)
La regresión lineal es un modelo estadístico de la relación entre un predictor \(x\) y una variable respuesta cuantitativa \(y\) cuando esta relación es lineal con cierto error \(\epsilon\)
\[ y = \beta_0 + \beta_1 x + \epsilon \]
En este curso no hablaremos mucho del error \(\epsilon\) pero recuerda que siempre existe.
Para estimar los valores de \(\beta_0\) y \(\beta_1\), usamos los datos.
Llamamos a las estimaciones \(b_0\) y \(b_1\) y \(\hat{y} = b_0 + b_1 x\).
\(b_0\) y \(b_1\) son aquellos valores que hacen que las distancias verticales vistas anteriormente sean mínimas.
Los residuos nos dicen cómo de lejos está cada valor predicho de su valore observado
Residuo = Valor observado - valor predicho: \(y - \hat{y}\)
La recta de regresión es aquella que minimiza la suma de distancias verticales.
Esto es equivalente a minimizar la suma de los residuos al cuadrado
\[\begin{eqnarray} &&\sum_{i=1}^n [y_i-\hat{y}_i]^2 = \\ &&\sum_{i=1}^n [y_i-(\beta_0 + \beta_1 x)]^2 \end{eqnarray}\]
Podemos visualizar:
Las predicciones de los modelos
Los residuos de los modelos
Para esto, utilizamos modelr de
tidyverse
## # A tibble: 29 × 1
## wt
## <dbl>
## 1 1.51
## 2 1.62
## 3 1.84
## 4 1.94
## 5 2.14
## 6 2.2
## 7 2.32
## 8 2.46
## 9 2.62
## 10 2.77
## # … with 19 more rows
## # A tibble: 29 × 2
## wt pred
## <dbl> <dbl>
## 1 1.51 29.2
## 2 1.62 28.7
## 3 1.84 27.5
## 4 1.94 26.9
## 5 2.14 25.8
## 6 2.2 25.5
## 7 2.32 24.9
## 8 2.46 24.1
## 9 2.62 23.3
## 10 2.77 22.5
## # … with 19 more rows
ggplot(mtcars, aes(wt)) +
geom_point(aes(y = mpg)) + theme_minimal() +
geom_line(aes(y = pred), data = grid, colour = "red", size = 1)Añadimos residuos usando
Las predicciones nos dicen qué patrón hemos capturado
Los residuos indican qué patrón queda sin capturar
Explicación: caracterizar la relación entre \(y\) y \(x\) a través de los parámetros \(\beta_0\) y \(\beta_1\)
Predicción: para un nuevo valor de \(x\), obtener su valor \(y\)
Volvamos a la regresión anterior. La librería broom de
tidyverse, sirve para ordenar los resultados de lm.
OJO: no se carga automáticamente al cargar
tidyverse.
## # A tibble: 2 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 37.3 1.88 19.9 8.24e-19
## 2 wt -5.34 0.559 -9.56 1.29e-10
El modelo de regresión lineal es
\[ \widehat{ \text{mpg} } = \beta_0 + \beta_1 \text{wt} \]
Aumentemos wt en una unidad
\[\begin{eqnarray} && \beta_0 + \beta_1 ( \text{wt} + 1) = \\ && \beta_0 + \beta_1 \text{wt} + \beta_1 = \\ && \widehat{ \text{mpg} } + \beta_1 \end{eqnarray}\]
¿Cómo se interpreta \(\beta_1\)?
El modelo de regresión lineal es
\[ \widehat{ \text{mpg} } = \beta_0 + \beta_1 \text{wt} \]
Sustituímos wt por cero
\[\begin{eqnarray} \widehat{ \text{mpg} } = \beta_0 + \beta_1 \times 0 = \beta_0 \end{eqnarray}\]
¿Cómo se interpreta \(\beta_0\)?
Vamos a modelizar cómo afectan los años de experiencia en el salario de un profesor
Vamos a modelizar cómo afectan los años de experiencia en el salario de un profesor
Ajusta un modelo lineal, obtén los coeficientes e interprétalos.
Determina la predicción del salario de un profesor con 15 años de experiencia.
ggplot(teacher, aes(x=years, y=base)) + geom_point() +
geom_smooth(method="lm", color='red', se=FALSE) + theme_minimal()Hasta ahora hemos considerado la \(x\) contínua. ¿Qué sucede si es categórica?
Imaginemos que la \(x\) se refiere a género y toma dos valores: masculino y femenino.
\(y = \beta_0 + \beta_1 x\) no tendría sentido, \(x\) no es un número!
Podemos hacer \(y = \beta_0 +\beta_1 \text{gen}\_\text{masc}\), donde \(\text{gen}\_\text{masc}\) toma valor 1 para hombres y cero para mujeres
Salario frente a grado. ¿Qué niveles tiene la variable degree?
Ajustamos un modelo
## # A tibble: 2 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 56610. 1777. 31.8 5.44e-43
## 2 degreeBA -352. 2398. -0.147 8.84e- 1
R ha creado una variable indicatriz degreeBA: si el grado es BA toma valor 1, sino 0.
Si la variable tuviese tres niveles A, B y C, R crearía dos variables indicatrices, e.g. para A y B.
El nivel base es el nivel que toma la variable cuando todas las indicatrices son 0.
Los coeficientes se interpretan respecto al nivel base.
## # A tibble: 2 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 56610. 1777. 31.8 5.44e-43
## 2 degreeBA -352. 2398. -0.147 8.84e- 1
Interpreta cada coeficiente
mod_base_degree <- lm(base ~ degree, data=teacher)
grid <- teacher %>%
data_grid(degree) %>%
add_predictions(mod_base_degree)
grid## # A tibble: 2 × 2
## degree pred
## <fct> <dbl>
## 1 MA 56610.
## 2 BA 56257.
ggplot(teacher, aes(x=degree)) + geom_point(aes(y=base)) + theme_minimal() +
geom_point(data = grid, aes(y = pred), colour = "red", size = 4)Predecimos la media para cada grupo!
En múltiples ocasiones, tenemos más de una variable predictora.
El modelo lineal más sencillo para este caso, es la regresión lineal múltiple
\[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p \]
¿Cómo se interpreta \(\beta_0\)?
¿Cómo se interpreta \(\beta_1\)?
En R
## # A tibble: 3 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 44838. 1156. 38.8 4.11e-48
## 2 years 818. 54.0 15.2 1.75e-23
## 3 degreeBA -2560. 1164. -2.20 3.12e- 2
Visualizamos las predicciones
## # A tibble: 76 × 3
## years degree pred
## <dbl> <fct> <dbl>
## 1 0 MA 44838.
## 2 0 BA 42278.
## 3 1 MA 45656.
## 4 1 BA 43096.
## 5 2 MA 46474.
## 6 2 BA 43914.
## 7 3 MA 47292.
## 8 3 BA 44732.
## 9 4 MA 48110.
## 10 4 BA 45550.
## # … with 66 more rows
Visualizamos las predicciones
ggplot(teacher, aes(years, base, colour = degree)) +
geom_point() +
geom_line(data = grid, aes(y = pred)) + theme_minimal()Este tema está fundamentalmente basado en R for Data Science, Wickham and Grolemund (2016)